package com.ipartek.pruebas.test;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.ObjectInputStream.GetField;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.StringTokenizer;

import com.ipartek.pruebas.bean.Alumno;
import com.ipartek.pruebas.enumeraciones.Rol;

public class PruebaBDB {
	static String direccionfichero = "C:\\Documents and Settings\\curso\\workspace\\uf1289GoogleCode\\data\\Alumnos.txt";

	static int numLineasLeidas = 0;
	static int numInsertBBDD = 0;
	
	static long ini=0;
	static long fin=0;
	
	static ArrayList<Alumno> listaAlumnos;
	
	
	static Connection conn = null;
	static Statement stmt = null;
	
	static String tempo;
		
	public static void main(String[] args)  {
		//String ruta="c:\\archiv~1\\Micros~2\\Office12\\msaccess.exe C:\\Desarrollo\\workspace\\javase6Google\\data\\PruebaCurso.mdb //compact";

		ini = System.currentTimeMillis();
		
		try {
			Alumno alumnoTemp = new Alumno();
			ArrayList<Alumno> alumno1 = new ArrayList<Alumno>();
			FileReader fileRA = new FileReader(direccionfichero);
			System.out.println ("abrimos fichero= " + direccionfichero );
			BufferedReader br = new BufferedReader(fileRA);
			String linea;
			
			
			while ((linea = br.readLine()) != null)// Hasta que no haya nada
			{
				StringTokenizer st = new StringTokenizer(linea, ",");
				alumnoTemp.setNombre(st.nextToken());
				alumnoTemp.setApellido1(st.nextToken());
				alumnoTemp.setApellido2(st.nextToken());
				tempo = st.nextToken();
				int i = 0;
				i = Integer.parseInt(tempo);
				alumnoTemp.setEdad(i);
				alumnoTemp.setEmail(st.nextToken());
				alumnoTemp.setDni(st.nextToken());

				tempo = st.nextToken();
				if (tempo.equals("TRABAJADOR")) {
					alumnoTemp.setRol(Rol.TRABAJADOR);
				} else {
					if (tempo.equals("JEFE")) {
						alumnoTemp.setRol(Rol.JEFE);
					} else {
						alumnoTemp.setRol(Rol.CLIENTE);
					}
				}
				// System.out.println(alumnoTemp.toString());
				alumno1.add(new Alumno());
				alumno1.get(numLineasLeidas).setNombre(alumnoTemp.getNombre());
				alumno1.get(numLineasLeidas).setApellido1(alumnoTemp.getApellido1());
				alumno1.get(numLineasLeidas).setApellido2(alumnoTemp.getApellido2());
				alumno1.get(numLineasLeidas).setEdad(alumnoTemp.getEdad());
				alumno1.get(numLineasLeidas).setEmail(alumnoTemp.getEmail());
				alumno1.get(numLineasLeidas).setDni(alumnoTemp.getDni());
				alumno1.get(numLineasLeidas).setRol(alumnoTemp.getRol());
				numLineasLeidas++;
			}
			
			System.out.println("Numero de lineas leidas = " + numLineasLeidas);
			
			/*para prueba
			for (k = 0; k < alumno1.size(); k++) {
				System.out.println(alumno1.get(k).getNombre() + " "
						+ alumno1.get(k).getApellido1() + " "
						+ alumno1.get(k).getApellido2() + " "
						+ alumno1.get(k).getEdad() + " "
						+ alumno1.get(k).getEmail() + " "
						+ alumno1.get(k).getDni() + " "
						+ alumno1.get(k).getRol());
			}
			*/
			br.close();
			// base de datos

			//Runtime rt = Runtime.getRuntime();
			
            //Process proc = rt.exec(ruta);

			
			try {
				conn = DriverManager.getConnection("jdbc:odbc:pruebas", ",",",");				
				stmt = conn.createStatement();
			} catch (SQLException e) {
				System.out.println("No conecta la base de datos");
			}
			// voy a meter datos

			String sqlSelect = "";
			int rol1 = 0;
			numInsertBBDD=0;
			for (numInsertBBDD = 0; numInsertBBDD < alumno1.size(); numInsertBBDD++) {
				if (alumno1.get(numInsertBBDD).getRol()==Rol.TRABAJADOR){
					rol1=0;
				}else{
					if (alumno1.get(numInsertBBDD).getRol()==Rol.CLIENTE){
						rol1=1;
					}else{
						rol1=2;
					}
				}
				sqlSelect = "insert into Alumnos (dni,nombre,apellido1,apellido2,edad,rol,email,Fecha_Alta) values("
						+ "'"+ alumno1.get(numInsertBBDD).getDni()+"'"
						+ ","
						+ "'"+ alumno1.get(numInsertBBDD).getNombre()+"'"
						+ ","
						+ "'"+alumno1.get(numInsertBBDD).getApellido1()+"'"
						+ ","
						+ "'"+alumno1.get(numInsertBBDD).getApellido2()+"'"
						+ ","
						+ alumno1.get(numInsertBBDD).getEdad()
						+ ","
						//+ alumno1.get(k).getRol()
						+rol1
						+ ","
						+ "'"+alumno1.get(numInsertBBDD).getEmail() +"'"
						+","
						+"NOW"
						+ ");";
				//System.out.println(sqlSelect); para prueba
				stmt.executeUpdate(sqlSelect);
				numInsertBBDD++;
			}
			System.out.println("Registros insertados: " + numInsertBBDD);
			
			
			
			alumno1=null;
		} catch (Exception e) {
			System.out.println(e);
			System.out.println("Error de DB");
		} finally {
			if ( stmt !=null ){
				try {
					stmt.close();
				} catch (SQLException e) {					
					e.printStackTrace();
				}
			}	
			if ( conn !=null ){
				try {
					conn.close();
				} catch (SQLException e) {					
					e.printStackTrace();
				}
			}
			
			
			fin = System.currentTimeMillis();
			checkMigracion();
			System.out.println("Ejecucion completada: "+ (fin - ini) + " ms");
			
		}
	}
			
	private static void checkMigracion(){
		
		if ( numInsertBBDD == numLineasLeidas ){
			System.out.println("Todo correcto respecto al numero de registrso leidos e insertados");
		}else{
			System.out.println("ERROR no coinciden las lineas leidas y las insertadas, Lanzar excepcion personalizada");
		}
		
	}
	
	int cargarArrayListFromTxt ( String pathToFile ){
		
		return -1;
	}
	
	int insertarArrayBBDD (){
		return -1;
	}
	
	
	

}